package net.realsee.domain.wcs.rcs.hik.v4;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.List;

/**
 * 海康RCS生成任务单参数
 *
 * @author 孙正华
 * @since 2023/9/27 10:04
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class HikTaskSubmitReq {

    /**
     * 外部任务唯一编号,如果为空，系统生成任务号并返回。
     */
    private String robotTaskCode;

    /**
     * 任务类型
     * 在物流机器人调度系统配置，封装了与业务系统无关的内部调度逻辑。
     * 可扩展的枚举值。
     * 预制枚举值：
     * TRANSPORT
     * 搬运，一至数个执行步骤。
     */
    private String taskType;

    /**
     * 执行步骤集合。每个执行步骤完成后，都需要业务系统通过任务继续执行接口，来驱动下一个阶段的执行。
     */
    private List<HikTaskTargetRoute> targetRoute;

    /**
     * 任务执行的初始优先顺序，数值越大，优先级越高。
     * 但机器人调度系统会根据任务繁忙程度，机器人的工作状态，以及其他优先级修正条件，进行综合判定后，实时动态调整任务实际的优先级数值。
     */
    private Integer initPriority;

    /**
     * 任务截止时间，任务优先级修正条件之一。截止时间之前需要任务执行完成。格式：秒精度。
     */
    private Date deadline;

    /**
     * 要求调度系统仅在当前指定的范围内选择机器人执行该任务。
     * 可能出现任务与机器人类型不匹配的异常，需要业务系统确保任务与机器人类型的匹配。
     * 如果不指定，则调度系统会在所有可用机器人的范围内寻找最优方案。
     * 固定枚举值：
     * GROUPS
     * 机器人资源组编号
     * ROBOTS
     * 机器人编号
     */
    private String robotType;

    /**
     * 与robotType匹配的资源类型唯一标识。
     */
    private List<String> robotCode;

    /**
     * 能否打断，
     * 1:可打断
     * 该货架中途有其他任务时，打断当前任务。
     * 0:不可打断
     * 该货架中途有其他任务时，不能打断当前任务。默认不可打断。
     */
    private Integer interrupt;

    /**
     * 任务组编号，全局唯一
     */
    private String groupCode;

    private HikTaskExtra extra;

}
